<?php

namespace JLPay\Models\Openmerch\Change;

use JLPay\Models\BaseRequest;

/**
 * 结算账户变更请求
 */
class SettleAccountChangeRequest extends BaseRequest
{
    /**
     * API URL
     */
    public const API_URL = '/open/merch/access/settle-info/modify';

    protected ?string $applyId = null;
    protected ?string $merchNo = null;
    protected ?string $settleType = null;
    protected ?string $accountName = null;
    protected ?string $accountNo = null;
    protected ?string $bankCode = null;
    protected ?string $bankBranchId = null;
    protected ?string $bankBranchName = null;
    protected ?string $accountPic = null;
    protected ?string $bankSetPhone = null;
    protected ?string $certType = null;
    protected ?string $delegateeIdCard = null;
    protected ?string $delegateeCertPeriodBegin = null;
    protected ?string $delegateeCertPeriodEnd = null;
    protected ?string $acctLicense = null;
    protected ?string $acctCertFrontPic = null;
    protected ?string $acctCertBackPic = null;
    protected ?string $acctAuthLetter = null;
    protected ?string $identityFacePic = null;
    protected ?string $acctFacePic = null;
    protected ?array $proofInfo = null;

    /**
     * 检查是否需要加密
     *
     * @return bool
     */
    public function requiresEncrypt(): bool
    {
        return true;
    }

    /**
     * 获取敏感字段列表
     *
     * @return array
     */
    public function getSensitiveFields(): array
    {
        return [
            'account_name',      // 结算账户名
            'account_no',        // 账号
            'bank_set_phone',    // 预留银行手机号码
            'delegatee_id_card', // 收款人证件号码
        ];
    }

    /**
     * 设置业务申请编号
     *
     * @param string $applyId
     * @return self
     */
    public function setApplyId(string $applyId): self
    {
        $this->applyId = $applyId;
        return $this;
    }

    /**
     * 设置商户号
     *
     * @param string $merchNo
     * @return self
     */
    public function setMerchNo(string $merchNo): self
    {
        $this->merchNo = $merchNo;
        return $this;
    }

    /**
     * 设置结算类型
     *
     * @param string $settleType
     * @return self
     */
    public function setSettleType(string $settleType): self
    {
        $this->settleType = $settleType;
        return $this;
    }

    /**
     * 设置结算账户名
     *
     * @param string $accountName
     * @return self
     */
    public function setAccountName(string $accountName): self
    {
        $this->accountName = $accountName;
        return $this;
    }

    /**
     * 设置账号
     *
     * @param string $accountNo
     * @return self
     */
    public function setAccountNo(string $accountNo): self
    {
        $this->accountNo = $accountNo;
        return $this;
    }

    /**
     * 设置开户银行
     *
     * @param string $bankCode
     * @return self
     */
    public function setBankCode(string $bankCode): self
    {
        $this->bankCode = $bankCode;
        return $this;
    }

    /**
     * 设置开户支行编号
     *
     * @param string $bankBranchId
     * @return self
     */
    public function setBankBranchId(string $bankBranchId): self
    {
        $this->bankBranchId = $bankBranchId;
        return $this;
    }

    /**
     * 设置开户支行名称
     *
     * @param string $bankBranchName
     * @return self
     */
    public function setBankBranchName(string $bankBranchName): self
    {
        $this->bankBranchName = $bankBranchName;
        return $this;
    }

    /**
     * 设置结算账户照片
     *
     * @param string $accountPic
     * @return self
     */
    public function setAccountPic(string $accountPic): self
    {
        $this->accountPic = $accountPic;
        return $this;
    }

    /**
     * 设置预留银行手机号码
     *
     * @param string $bankSetPhone
     * @return self
     */
    public function setBankSetPhone(string $bankSetPhone): self
    {
        $this->bankSetPhone = $bankSetPhone;
        return $this;
    }

    /**
     * 设置收款人证件类型
     *
     * @param string $certType
     * @return self
     */
    public function setCertType(string $certType): self
    {
        $this->certType = $certType;
        return $this;
    }

    /**
     * 设置收款人证件号码
     *
     * @param string $delegateeIdCard
     * @return self
     */
    public function setDelegateeIdCard(string $delegateeIdCard): self
    {
        $this->delegateeIdCard = $delegateeIdCard;
        return $this;
    }

    /**
     * 设置收款人证件有效期开始日期
     *
     * @param string $delegateeCertPeriodBegin
     * @return self
     */
    public function setDelegateeCertPeriodBegin(string $delegateeCertPeriodBegin): self
    {
        $this->delegateeCertPeriodBegin = $delegateeCertPeriodBegin;
        return $this;
    }

    /**
     * 设置收款人证件有效期结束日期
     *
     * @param string $delegateeCertPeriodEnd
     * @return self
     */
    public function setDelegateeCertPeriodEnd(string $delegateeCertPeriodEnd): self
    {
        $this->delegateeCertPeriodEnd = $delegateeCertPeriodEnd;
        return $this;
    }

    /**
     * 设置结算账户公司营业执照照片
     *
     * @param string $acctLicense
     * @return self
     */
    public function setAcctLicense(string $acctLicense): self
    {
        $this->acctLicense = $acctLicense;
        return $this;
    }

    /**
     * 设置结算账户人的身份证件正面
     *
     * @param string $acctCertFrontPic
     * @return self
     */
    public function setAcctCertFrontPic(string $acctCertFrontPic): self
    {
        $this->acctCertFrontPic = $acctCertFrontPic;
        return $this;
    }

    /**
     * 设置结算账户人的身份证件反面
     *
     * @param string $acctCertBackPic
     * @return self
     */
    public function setAcctCertBackPic(string $acctCertBackPic): self
    {
        $this->acctCertBackPic = $acctCertBackPic;
        return $this;
    }

    /**
     * 设置结算账户收款确认书
     *
     * @param string $acctAuthLetter
     * @return self
     */
    public function setAcctAuthLetter(string $acctAuthLetter): self
    {
        $this->acctAuthLetter = $acctAuthLetter;
        return $this;
    }

    /**
     * 设置法人人脸图片
     *
     * @param string $identityFacePic
     * @return self
     */
    public function setIdentityFacePic(string $identityFacePic): self
    {
        $this->identityFacePic = $identityFacePic;
        return $this;
    }

    /**
     * 设置结算账户人脸图片
     *
     * @param string $acctFacePic
     * @return self
     */
    public function setAcctFacePic(string $acctFacePic): self
    {
        $this->acctFacePic = $acctFacePic;
        return $this;
    }

    /**
     * 设置辅助证明材料
     *
     * @param array $proofInfo
     * @return self
     */
    public function setProofInfo(array $proofInfo): self
    {
        $this->proofInfo = $proofInfo;
        return $this;
    }
} 